package com.distribute.rest.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.distribute.rest.pojo.CatResult;
import com.distribute.rest.service.ItemCatService;
import com.distribute.common.util.JsonUtils;

/**
 * 宠物分类列表
 * <p>Title: ItemCatController</p>
 * <p>Description: </p>
 * <p>Company: www.mings.com</p> 
 * @author	曾晓明
 * @date	2018年1月7日下午3:02:39
 * @version 1.0
 */
@Controller
public class ItemCatController {
	
	@Autowired
	private ItemCatService itemCatService;

	/*@RequestMapping(value="/itemcat/list", 
			produces=MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8")
	@ResponseBody
	public String getItemCatList(String callback) {
		CatResult catResult = itemCatService.getItemCatList();
		//把pojo转换成字符串
		String json = JsonUtils.objectToJson(catResult);
		//拼装返回值
		String result = callback + "(" + json + ");";
		return result;
	}*/
	@RequestMapping("/itemcat/list")
	@ResponseBody
	public Object getItemCatList(String callback) {
		CatResult catResult = itemCatService.getItemCatList();
		//JavaScript规范中提到的json是不能直接跨域调用，为了安全，但是能调用js片段，所以把json包装为一个js片段，也就是jsonp那么就能够跨域请求
		/*在spring4.1后，提供了新的方法可以作为jsonp的调用.
		1.response 响应类型为 application/JavaScript
		2.进行json请求的URL中需要携带参数 jsonp 或 callback，并指定值。
		3.针对显式注解 @ResponseBody 的方法 (我们本来就是直接响应JSON的)，我们需要做特殊处理，使用 MappingJacksonValue 进行封装处理。*/
		//此处callback是一个传递过来的回调函数，函数的参数为查询出来的catResult，最终通过MappingJacksonValue包装返回，
		//返回的数据类似于:函数名({"data":[{key:value,key:value....}],{},{}])
		MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
		mappingJacksonValue.setJsonpFunction(callback);
		return mappingJacksonValue;
		
	}
	@RequestMapping("/itemcat/list/dog")
	@ResponseBody
	public Object getDItemCatList(String callback) {
		CatResult catResult = itemCatService.getDItemCatList();
		//JavaScript规范中提到的json是不能直接跨域调用，为了安全，但是能调用js片段，所以把json包装为一个js片段，也就是jsonp那么就能够跨域请求
		/*在spring4.1后，提供了新的方法可以作为jsonp的调用.
		1.response 响应类型为 application/JavaScript
		2.进行json请求的URL中需要携带参数 jsonp 或 callback，并指定值。
		3.针对显式注解 @ResponseBody 的方法 (我们本来就是直接响应JSON的)，我们需要做特殊处理，使用 MappingJacksonValue 进行封装处理。*/
		//此处callback是一个传递过来的回调函数，函数的参数为查询出来的catResult，最终通过MappingJacksonValue包装返回，
		//返回的数据类似于:函数名({"data":[{key:value,key:value....}],{},{}])
		MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
		mappingJacksonValue.setJsonpFunction(callback);
		return mappingJacksonValue;
		
	}
	@RequestMapping("/itemcat/list/cat")
	@ResponseBody
	public Object getCItemCatList(String callback) {
		CatResult catResult = itemCatService.getCItemCatList();
		//JavaScript规范中提到的json是不能直接跨域调用，为了安全，但是能调用js片段，所以把json包装为一个js片段，也就是jsonp那么就能够跨域请求
		/*在spring4.1后，提供了新的方法可以作为jsonp的调用.
		1.response 响应类型为 application/JavaScript
		2.进行json请求的URL中需要携带参数 jsonp 或 callback，并指定值。
		3.针对显式注解 @ResponseBody 的方法 (我们本来就是直接响应JSON的)，我们需要做特殊处理，使用 MappingJacksonValue 进行封装处理。*/
		//此处callback是一个传递过来的回调函数，函数的参数为查询出来的catResult，最终通过MappingJacksonValue包装返回，
		//返回的数据类似于:函数名({"data":[{key:value,key:value....}],{},{}])
		MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
		mappingJacksonValue.setJsonpFunction(callback);
		return mappingJacksonValue;
		
	}
}
